Euler Problem 243

A positive fraction whose numerator is less than its denominator is called a proper fraction. For any denominator, d, there will be d−1 proper fractions; for example, with d = 12: 1/12 , 2/12 , 3/12 , 4/12 , 5/12 , 6/12 , 7/12 , 8/12 , 9/12 , 10/12 , 11/12 .

We shall call a fraction that cannot be cancelled down a resilient fraction. Furthermore we shall define the resilience of a denominator, R(d), to be the ratio of its proper fractions that are resilient; for example, R(12) = 4/11 . In fact, d = 12 is the smallest denominator having a resilience R(d) < 4/10 .

Find the smallest denominator d, having a resilience R(d) < 15499/94744 .


In [1]:
import heapq
from sympy import primerange
smallprimes = list(primerange(1, 100))
queue = []
heapq.heappush(queue, (2, 1, 1))
r = 1
while queue and r >= 15499/94744:
    n, i, phi = heapq.heappop(queue)
    r = phi / (n - 1)
    p, q = smallprimes[i-1:i+1]
    heapq.heappush(queue, (p*n, i, p*phi))
    heapq.heappush(queue, (q*n, i+1, (q-1)*phi))
print(n)


892371480

In [ ]: